$(function () {
  var currentPage = 1; // 当前页 
  var pageSize = 5; // 每页数据条数

  // 1- 数据动态渲染 
  // 1- ajax获取数据
  // 2- 模板引擎渲染
  function render () {
    $.ajax({
      type: 'get',
      url: '/product/queryProductDetailList',
      data: {
        page: currentPage,
        pageSize: pageSize
      },
      dataType: 'json',
      success: function (res) {
        console.log(res);
        // 渲染
        $('tbody').html(template('tmp', res));
        // 根据res.total中数据的总数 来生成分页 
        setPage(res.total);
      }
    })
  }

  render();

  // 2-分页
  // 分页的页码是跟数据库的总数 来动态生成的 ， 
  // 要先获取总数，在生成分页标签
  // total 表示数据库数据的总数 

  function setPage (total) {
    // 使用分页插件生成分页
    $("#paginator").bootstrapPaginator({
      bootstrapMajorVersion: 3,//默认是2，如果是bootstrap3版本，这个参数必填
      currentPage: currentPage, // 高亮的按钮 
      totalPages: Math.ceil(total / pageSize),// 分页按钮的个数
      onPageClicked: function (event, originalEvent, type, page) {
        //为按钮绑定点击事件 page:当前点击的按钮值
        // 1- 改变当前页取值 
        currentPage = page;
        // 2- 重新渲染
        render();
      }
    });
  }


  // 3- 下拉列表填充 
  // 1- ajax 去后台获取 二级分类的数据
  // 2- 用模板填充到 列表中 

  $.ajax({
    type: 'get',
    url: '/category/querySecondCategoryPaging',
    data: {
      page: 1,
      pageSize: 100
    },
    dataType: 'json',
    success: function (res) {
      console.log(res);
      // 渲染
      $('.cate-two-list').html(template('cate-two', res));
    }
  })

  // 4 - 下拉列表的选中
  // 1 - 点击a标签 ，获取文字设置给按钮
  // 2 - 获取a标签id, 设置给隐藏
  $('.cate-two-list').on('click', 'a', function () {
    $('.cate-title').text($(this).text());
    $('#brandId').val($(this).data('id'));
    // 下拉列表选中 数据后，恢复下拉列表的校验状态 改为成功的状态 
    $('.add-form').data('bootstrapValidator').updateStatus('brandId', 'VALID');
  })


  // 5- 图片上传
  // 图片上传要求： 
  // 1- 上传图片预览 
  // 3- 只保留最近上传的三张图片， 用于在移动端做轮播图使用 
  //   最近上传的三张图片： 记录图片上传的顺序， 记录图片的个数！   用数组进行解决！

  var picArr = []; // 用于记录图片上传的顺序和个数的！

  $("#file").fileupload({
    dataType: "json",
    //e：事件对象
    //data：图片上传后的对象，通过data.result.picAddr可以获取上传后的图片地址
    done: function (e, data) {
      console.log(data.result);
      var img = data.result; //存放有图片地址和名字 
      // 把上传成功的图片 添加到 picArr 
      picArr.unshift(img);

      // 把上传成功图片进行预览：
      $('.img-box').prepend('<img src="' + img.picAddr + '" alt="" height="60" >');

      // 只保留最近上传的三张图片
      if (picArr.length > 3) {
        // 删除数组的最后一个元素 
        picArr.pop();
        // 删除图片容器中最后一个图片 
        $('.img-box img:last-child').remove();
      }

      // 当图片的个数满足要求时，把图片地址赋给隐藏域 , 以便传递给后台
      if (picArr.length == 3) {
        // console.log(JSON.stringify(picArr));
        // json字符串 可以用字符串来描述js的数据 
        $('#picArr').val(JSON.stringify(picArr));
        //  图片上传够3张， 恢复图片的校验状态 
        $('.add-form').data('bootstrapValidator').updateStatus('picArr', 'VALID');
      }
      console.log('picArr:', picArr);
    }
  });

  // 6-表单校验 
  //使用表单校验插件
  $('.add-form').bootstrapValidator({
    //1. 指定不校验的类型，默认为[':disabled', ':hidden', ':not(:visible)'],可以不设置
    excluded: [':disabled'],

    //2. 指定校验时的图标显示，默认是bootstrap风格
    feedbackIcons: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },

    //3. 指定校验字段
    fields: {
      //校验用户名，对应name表单的name属性
      // 二级分类id
      brandId: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请选择二级分类'
          }
        }
      },
      // 商品名称
      proName: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请输入商品名称'
          }
        }
      },
      // 商品描述
      proDesc: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请输入商品描述'
          }
        }
      },
      // 商品库存
      num: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请输入商品库存'
          },
          //正则校验  
          regexp: {
            regexp: /^[1-9]\d*$/,
            message: '必须是非零开头的数字！'
          }
        }
      },
      // 商品尺码
      size: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请输入商品尺码'
          },
          //正则校验  
          regexp: {
            regexp: /^[1-9]\d-[1-9]\d$/,
            message: '尺码必须是xx-xx格式，x是数字！'
          }
        }
      },
      // 商品原价
      oldPrice: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请输入商品原价'
          },
          //正则校验  
          regexp: {
            regexp: /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/,
            message: '价格必须是价格(整数、小数）！'
          }
        }
      },
      // 商品现价
      price: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请输入商品现价'
          },
          //正则校验  
          regexp: {
            regexp: /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/,
            message: '价格必须是价格(整数、小数）！'
          }
        }
      },
      // 三张图片
      picArr: {
        validators: {
          //不能为空
          notEmpty: {
            message: '请上传三张图片'
          }
        }
      }
    }

  });

  // 7-手动恢复 下拉列表和图片的校验张图
  // 1- 下拉列表选中 数据后，恢复下拉列表的校验状态 
  // 2- 图片上传够3张， 恢复图片的校验状态 


  // 8- 正则校验
  // 库存： 非零开头的数字
  // 尺码： xx-xx 格式， x 是数字  20-30  
  // 价格： 必须是一个合理价格 


  // 9- 添加商品到服务器 
  // 1- 添加添加按钮，并在数据校验合理的情况下，向后台发送请求，添加数据 success.form.bv事件 
  // 2- 商品添加完成， 模态框隐藏，页面重新渲染， 表单重置， 手动重置 

  $('.add-form').on('success.form.bv', function (e) {
    e.preventDefault(); //阻止默认行为 
    // ajax发送数据给后台  
    $.ajax({
      type: 'post',
      url: '/product/addProduct',
      data: $('.add-form').serialize(),
      dataType: 'json',
      success: function (res) {
        console.log(res);
        // 模态框隐藏
        $('.modal-add').modal('hide');
        // 页面重新渲染
        render();
        // 重置数据和校验样式 
        $('.add-form').data('bootstrapValidator').resetForm(true);
        // 手动重置 下拉列表 和图片的校验状态 
        $('.cate-title').text('请选择二级分类');
        $('.img-box').empty(); //清空img-box 

        // 数据重置 (吃完饭洗完)
        picArr = [];  // 避免下次添加商品时，之前数据对添加产生影响
      }
    })
  })










})